<?php

require_once(BaseConfig::LoadClass('objeto_base.class.php'        ));
require_once(BaseConfig::LoadClass('filtro.class.php'             ));
require_once(BaseConfig::LoadClass('abc.class.php'                ));
require_once(BaseConfig::LoadClass('plugin_abc.class.php'         ));
require_once(BaseConfig::LoadClass('cotizador_extendido.class.php'));
require_once(BaseConfig::LoadClass('cotizacion_pdf.class.php'     ));
require_once(BaseConfig::LoadClass('mail.class.php'               ));
require_once(BaseConfig::LoadClass('precios_cotiza.class.php'     ));
require_once(BaseConfig::LoadClass('datos_cotizacion.class.php'   ));
require_once(BaseConfig::LoadClass('poliza.class.php'             ));
require_once(BaseConfig::LoadClass('vendedores.class.php'         ));
require_once(BaseConfig::LoadClass('lugar_venta.class.php'        ));

class Cotizaciones extends ObjetoBase {
  var $intIdCotizacion    ;
  var $intIdDatoCotizacion;
  var $intCodCotizacion   ;
  var $intCodPasado       ;
  var $dteFechaCreacion   ;
  var $dteFechaVencimiento;
  var $strAPaterno        ;
  var $strAMaterno        ;
  var $strNombre          ;
  var $strTelefono        ;
  var $dteDeFecNac        ;
  var $intDeSexo          ;
  var $strDeEmail         ;
  var $strDeCP            ;
  var $intDeEstado        ;
  var $intDeColonia       ;
  var $intDeMarca         ;
  var $intDeMarcaAnio     ;
  var $intDeSisa          ;
  var $fltDeDeducibleRT   ;
  var $fltDeDeducibleDM   ;
  var $fltDeCoberturaRC   ;
  var $fltDeCoberturaGM   ;
  var $intDePaquete       ;
  var $intDeFormaPago     ;
  var $intDeConductoPago  ;
  var $strResultadoWS     ;
  var $intIdLog           ;
  var $strRutaArchivo     ;
  var $strURLCotizaAIG    ;
  var $strSerializedData  ;
  var $intIdMunicipio     ;
  
  function Cotizaciones($intIdCotizacion = 0) {
    $arrMapaDatos = Array();
    
    $arrMapaDatos['id_cotizacion'     ] = Array('NombreVariable' => 'intIdCotizacion'    , 'TipoVariable' => 'I');
    
    $arrMapaDatos['id_dato_cotizacion'] = Array('NombreVariable' => 'intIdDatoCotizacion', 'TipoVariable' => 'N');
    $arrMapaDatos['cod_cotizacion'    ] = Array('NombreVariable' => 'intCodCotizacion'   , 'TipoVariable' => 'N');
    $arrMapaDatos['cod_pasado'        ] = Array('NombreVariable' => 'intCodPasado'       , 'TipoVariable' => 'N');
    $arrMapaDatos['fecha_creacion'    ] = Array('NombreVariable' => 'dteFechaCreacion'   , 'TipoVariable' => 'D');
    $arrMapaDatos['apaterno'          ] = Array('NombreVariable' => 'strAPaterno'        , 'TipoVariable' => 'S');
    $arrMapaDatos['amaterno'          ] = Array('NombreVariable' => 'strAMaterno'        , 'TipoVariable' => 'S');
    $arrMapaDatos['nombre'            ] = Array('NombreVariable' => 'strNombre'          , 'TipoVariable' => 'S');
    $arrMapaDatos['telefono'          ] = Array('NombreVariable' => 'strTelefono'        , 'TipoVariable' => 'S');
    
    $arrMapaDatos['de_fec_nac'        ] = Array('NombreVariable' => 'dteDeFecNac'        , 'TipoVariable' => 'D');
    $arrMapaDatos['de_sexo'           ] = Array('NombreVariable' => 'intDeSexo'          , 'TipoVariable' => 'N');
    $arrMapaDatos['de_email'          ] = Array('NombreVariable' => 'strDeEmail'         , 'TipoVariable' => 'S');
    $arrMapaDatos['de_cp'             ] = Array('NombreVariable' => 'strDeCP'            , 'TipoVariable' => 'S');
    $arrMapaDatos['de_estado'         ] = Array('NombreVariable' => 'intDeEstado'        , 'TipoVariable' => 'N');
    $arrMapaDatos['de_colonia'        ] = Array('NombreVariable' => 'intDeColonia'       , 'TipoVariable' => 'N');
    $arrMapaDatos['de_marca'          ] = Array('NombreVariable' => 'intDeMarca'         , 'TipoVariable' => 'N');
    $arrMapaDatos['de_marca_anio'     ] = Array('NombreVariable' => 'intDeMarcaAnio'     , 'TipoVariable' => 'N');
    $arrMapaDatos['de_sisa'           ] = Array('NombreVariable' => 'intDeSisa'          , 'TipoVariable' => 'N');
    $arrMapaDatos['de_deducible_rt'   ] = Array('NombreVariable' => 'fltDeDeducibleRT'   , 'TipoVariable' => 'N');
    $arrMapaDatos['de_deducible_dm'   ] = Array('NombreVariable' => 'fltDeDeducibleDM'   , 'TipoVariable' => 'N');
    $arrMapaDatos['de_cobertura_rc'   ] = Array('NombreVariable' => 'fltDeCoberturaRC'   , 'TipoVariable' => 'N');
    $arrMapaDatos['de_cobertura_gm'   ] = Array('NombreVariable' => 'fltDeCoberturaGM'   , 'TipoVariable' => 'N');
    $arrMapaDatos['de_paquete'        ] = Array('NombreVariable' => 'intDePaquete'       , 'TipoVariable' => 'N');
    $arrMapaDatos['de_forma_pago'     ] = Array('NombreVariable' => 'intDeFormaPago'     , 'TipoVariable' => 'N');
    $arrMapaDatos['de_conducto_pago'  ] = Array('NombreVariable' => 'intDeConductoPago'  , 'TipoVariable' => 'N');
    
    $arrMapaDatos['resultado_ws'      ] = Array('NombreVariable' => 'strResultadoWS'     , 'TipoVariable' => 'S');
    $arrMapaDatos['id_log'            ] = Array('NombreVariable' => 'intIdLog'           , 'TipoVariable' => 'N');
    $arrMapaDatos['ruta_archivo'      ] = Array('NombreVariable' => 'strRutaArchivo'     , 'TipoVariable' => 'S');
    $arrMapaDatos['url_cotiza_aig'    ] = Array('NombreVariable' => 'strURLCotizaAIG'    , 'TipoVariable' => 'S');
    $arrMapaDatos['serialized_data'   ] = Array('NombreVariable' => 'strSerializedData'  , 'TipoVariable' => 'S');
    $arrMapaDatos['id_municipio'      ] = Array('NombreVariable' => 'intIdMunicipio'     , 'TipoVariable' => 'N');
    
    $this->__ArmarDatosPrivados('cotizaciones', $arrMapaDatos, 'id_cotizacion');
    $this->SeleccionarPorIndice($intIdCotizacion);
  }
  
  function GenerarPDFRespuesta($arrDatosRespuesta) {
    $oPDFCotiza = new CotizacionPDF();
    $oPDFCotiza->SetCotizaObject   ($this             );
    $oPDFCotiza->SetResponseArray  ($arrDatosRespuesta);
    $oPDFCotiza->DoRender          ();
    
    return $oPDFCotiza->Guardar    ();
  }
  
  static function GenerarCotizador() {
    $strPagina = "";
    $oConfiguracion = new Config();
    error_reporting(0);
    
    $oTemplate = new Template();
    $oTemplate->AgregarArchivoExtra("cotizador.js"                         , "js");
    $oTemplate->AgregarArchivoExtra("jquery-plugins/jquery.validate.min.js", "js");
    $oTemplate->AgregarArchivoExtra("jquery-plugins/messages_es.js"        , "js");
    
//    if($_POST["paso"] == "4") { $_POST["paso"] = "2"; }
    if(Variables::GetOption('paso') == "999") {
      unset($_SESSION["extra"]["id_vendedor"]);
      return "<h1>Poliza generada correctamente</h1>";
    } else if(Variables::GetOption('paso') == "8") {
      $oPoliza = new Poliza();
      $strPagina = $oPoliza->MandarWebService(Variables::GetOption('datos'));
    } else if(Variables::GetOption('paso') == "7") {
      $oPoliza = new Poliza();
      $strPagina = $oPoliza->Mostrar();
    } else if(Variables::GetOption('paso') == "6") {
      $oConecta    = new Conecta();
      global $strGUrl;
      if(Variables::GetOption('aseg') == "beca") {
        $intIdCot = Variables::GetOption('id'  );
        $strAseg  = Variables::GetOption('aseg');
        $strTipo  = Variables::GetOption('tipo');
        
        $strConsulta = "SELECT id_cotizacion FROM cotizaciones WHERE id_dato_cotizacion = " . Variables::GetOption('id');
        $oConecta->Consulta($strConsulta);
        $intIdCotizaBeca = $oConecta->Field('id_cotizacion');
        $strConsulta = "SELECT * FROM precios_cotiza WHERE id_cotizacion = $intIdCotizaBeca AND nombre = '" . Variables::GetOption('tipo') . "'";
        $oConecta->Consulta($strConsulta);
        $fltMontoTotal = $oConecta->Field('precio'       );
        $fltMontoPP    = $oConecta->Field('primer_pago'  );
        $fltMontoPD    = $oConecta->Field('pagos_despues');
        
        $oCotiza = new Cotizaciones($intIdCotizaBeca);
        $arrDatosCot = unserialize($oCotiza->strSerializedData);
        $oDatosCotiza = new DatosCotizacion(Variables::GetOption('id'));
        //prent_R($oDatosCotiza);
        if($oDatosCotiza->intConductoPago == 1) {
          $oRef = new Referencia();
          $oRef->strNumeroRecibo = Variables::GetOption('id');
          $oRef->strFechaVenc    = date("Y-m-d");
          $oRef->strPrimaTotal   = $fltMontoPP;
          
          $strReferencia = $oRef->CalcularReferencia();
          eval('$strPagina = "' . $oTemplate->Get('datos_referencia.tpl.php') . '";');
        } else {
          eval('$strPagina = "' . $oTemplate->Get('datos_tarjeta.tpl.php') . '";');
        }
      }
    } else if((Variables::GetOption('paso') == "5") || (Variables::GetOption('paso') == "888")) {
      global $strGUrl;
      if(Variables::GetOption("error_code")) {
        switch(Variables::GetOption("error_code")) {
          case '1':
            $strErrorMsg = "No se pueden hacer cotizaciones para menores de 22 a&ntilde;os";
            break;
          case '2':
            $strErrorMsg = "No se pueden hacer cotizaciones para mayores de 70 a&ntilde;os";
            break;
          case '3':
            $strErrorMsg = "No se puede cotizar un vehiculo legalizado, fronterizo o de salvamento";
            break;
          case '4':
            $strErrorMsg = "Para cotizar un vehiculo no  particular, pongase en contacto con nosotros";
            break;
        }
        
        eval('$strPagina = "' . $oTemplate->Get('seleccion_cotizacion_error.tpl.php') . '";');
      } else {
        if(Variables::GetOption('paso') == "888") {
          $oConecta = new Conecta();
          $strConsulta = "SELECT * FROM precios_cotiza WHERE id_cotizacion = " . Variables::GetOption('id') . " AND nombre = 'Gold'";
          $oConecta->Consulta($strConsulta);
          $arrPrecios = $oConecta->GetColumn();
          $oCotiza2 = new Cotizaciones(Variables::GetOption('id'));
          $arrRet = unserialize($oCotiza2->strSerializedData);
          Cotizaciones::ObtenerDescripcionHTML("Gold", $arrPrecios, $arrRet);
        }
        
        $intIdDatoCotizacion = Variables::GetOption("id");
        eval('$strPagina = "' . $oTemplate->Get('seleccion_cotizacion.tpl.php') . '";');
      }
    } else if(Variables::GetOption('paso') == "4") {
      $oDatosCotiza = new DatosCotizacion();
      $oDatosCotiza->LlenarObjeto(Variables::GetOption('datos'));
      $oDatosCotiza->dteFechaEntrada = date("Y-m-d H:i:s");
      $oDatosCotiza->GuardarObjeto(true, true);
      
      if(Variables::GetOption("error_code")) {
        header("Location: index.php?option=cotizador&paso=5&id={$oDatosCotiza->intIdDatoCotizacion}&error_code=" . Variables::GetOption("error_code"));
      } else {
        header("Location: index.php?option=cotizador&paso=5&id={$oDatosCotiza->intIdDatoCotizacion}");
      }
      
      die;
    } else if(Variables::GetOption('paso') == "3") {
      global $strGPath;
      $oCotizacion = new Cotizaciones(Variables::GetOption('id'));
      
      // Verificar si ya existe el codigo pasado, si no, obtenerlo
      if(!$oCotizacion->intCodPasado) {
        $oTmp = new CotizadorExtendido();
        $oTmp->ObtenerCodPasado($oCotizacion->intCodCotizacion);
        $oCotizacion->intCodPasado = $oTmp->ObtenerArregloRespuesta();
        
        // Y de paso obtener tambien la impresion
        $oTmp->ObtenerPDF($oCotizacion->intCodCotizacion, $oCotizacion->intCodPasado);
        $oCotizacion->strURLCotizaAIG = $oTmp->ObtenerArregloRespuesta();
        
        // Por ultimo, guardar el objeto
        $oCotizacion->GuardarObjeto();
      }
      
//      prent_r($oCotizacion);
      
      header('Content-type: application/pdf');
      header('Content-Disposition: attachment; filename="cotizacion.pdf"');
//      readfile($strGPath . '/' . $oCotizacion->strRutaArchivo);
      readfile($oCotizacion->strURLCotizaAIG);
      die;
    } else if(Variables::GetOption('paso') == "2") {
      $oCotizador = new CotizadorExtendido();
      $oConecta   = new Conecta();
      
      $oCotizador->intCodigoPostal = $_POST["datos"]["cp"           ];
      $oCotizador->intSISA         = $_POST["datos"]["sisa"         ];
      $oCotizador->intModelo       = $_POST["datos"]["marca_anio"   ];
      
      $oCotizador->fltDeducibleRT  = $_POST["datos"]["deducible_rt" ];
      $oCotizador->fltDeducibleDM  = $_POST["datos"]["deducible_dm" ];
      $oCotizador->fltCoberturaRC  = $_POST["datos"]["cobertura_rc" ];
      $oCotizador->fltCoberturaGM  = $_POST["datos"]["cobertura_gm" ];
      $oCotizador->intTipoPaquete  = $_POST["datos"]["paquete"      ];
      $oCotizador->intSexo         = $_POST["datos"]["sexo"         ];
      $oCotizador->intEdad         = Variables::AniosDesdeFecha($_POST["datos"]["fec_nac"]);
      $oCotizador->intFormaPago    = $_POST["datos"]["forma_pago"   ];
      $oCotizador->intConductoPago = $_POST["datos"]["conducto_pago"];
      
//      $oCotizador->fltDescuento    = 20; //$_POST["rep"]["descuento"   ];
      $oCotizador->fltDescuento    = $oConfiguracion->Get('descuento_aut'  , '0');
      
      $oCotizacion = new Cotizaciones();
      
      $oCotizacion->dteDeFecNac       = $_POST["datos"]["fec_nac"      ];
      $oCotizacion->intDeSexo         = $_POST["datos"]["sexo"         ];
      $oCotizacion->strDeEmail        = $_POST["datos"]["email"        ];
      $oCotizacion->strDeCP           = $_POST["datos"]["cp"           ];
      $oCotizacion->intDeEstado       = $_POST["datos"]["estado"       ];
      $oCotizacion->intDeColonia      = $_POST["datos"]["colonia"      ];
      $oCotizacion->intDeMarca        = $_POST["datos"]["marca"        ];
      $oCotizacion->intDeMarcaAnio    = $_POST["datos"]["marca_anio"   ];
      $oCotizacion->intDeSisa         = $_POST["datos"]["sisa"         ];
      $oCotizacion->fltDeDeducibleRT  = $_POST["datos"]["deducible_rt" ];
      $oCotizacion->fltDeDeducibleDM  = $_POST["datos"]["deducible_dm" ];
      $oCotizacion->fltDeCoberturaRC  = $_POST["datos"]["cobertura_rc" ];
      $oCotizacion->fltDeCoberturaGM  = $_POST["datos"]["cobertura_gm" ];
      $oCotizacion->intDePaquete      = $_POST["datos"]["paquete"      ];
      $oCotizacion->intDeFormaPago    = $_POST["datos"]["forma_pago"   ];
      $oCotizacion->intDeConductoPago = $_POST["datos"]["conducto_pago"];
      
      $oCotizador->HacerCotizacion();
      $oCotizacion->intIdLog          = $oCotizador->__intLastIdLog;
      
      $arrRet = $oCotizador->ObtenerArregloRespuesta(true);
      
      $oCotizacion->dteFechaCreacion    = date("Y-m-d H:i:s");
      $oCotizacion->strAPaterno         = $_POST["datos"]["apaterno" ];
      $oCotizacion->strAMaterno         = $_POST["datos"]["amaterno" ];
      $oCotizacion->strNombre           = $_POST["datos"]["nombre"   ];
      $oCotizacion->strTelefono         = $_POST["datos"]["telefono" ];
      $oCotizacion->intIdDatoCotizacion = @$_POST["id_dato_cotizacion"];
      $oCotizacion->intCodCotizacion    = @$arrRet["Cotizacion"]["cod_Cotizacion"];
      $oCotizacion->strSerializedData   = serialize($arrRet);
      $oCotizacion->intIdMunicipio      = $_POST["datos"]["municipio"];
      
      if(isset($arrRet["Table1"]) && isset($arrRet["Table1"]["ErrorId"]) && $arrRet["Table1"]["ErrorId"] && !isset($arrRet[0])) {
        $arrRet[0] = $arrRet["Table1"];
      }
      
      if(isset($arrRet[0]) && isset($arrRet[0]["ErrorId"]) && ($arrRet[0]["ErrorId"])) {
        $strPagina  = "<b>Error ({$arrRet[0]["ErrorId"]})</b><br />";
        $strPagina .= "<span style='white-space:normal'><b>{$arrRet[0]["ErrorDesc"]}</b></span>";
//        $strPagina  = "<h1>Error ({$arrRet[0]["ErrorId"]})</h1><br />";
//        $strPagina .= "<h2>{$arrRet[0]["ErrorDesc"]}</h3>";
        
        $oCotizacion->strResultadoWS  = "FRACASO";
        $oCotizacion->strRutaArchivo  = "";
        
//        prent_r($oCotizacion);
        
        if(isset($_POST["via_ajax"])) {
          echo $oCotizacion->intIdCotizacion;
        } else if(isset($_POST["via_ajax_2"])) {
          $oCotizacion->GuardarObjeto();
          return $strPagina;
        }
      } else {
        global $strGPath;
        $oCotizacion->strResultadoWS  = "EXITO";
        $oCotizacion->GuardarObjeto(true, true);
        $oCotizacion->strRutaArchivo = $oCotizacion->GenerarPDFRespuesta($arrRet);
        $oCotizacion->GuardarObjeto();
        
        $arrIndices[] = "Gold"      ;
        $arrIndices[] = "Amplio"    ;
        $arrIndices[] = "Limitado"  ;
        $arrIndices[] = "Basico"    ;
        $arrIndices[] = "Segmentado";
        
        foreach($arrIndices as $strIndice) {
          $oPC = new PreciosCotiza();
          if(($strIndice == "Gold") && ($oCotizacion->intDeMarcaAnio < (date("Y") - 5))) {
            $oPC->intIdCotizacion = $oCotizacion->intIdCotizacion;
            $oPC->strNombre       = $strIndice;
            $oPC->fltPrecio       = 0;
            $oPC->fltPrimerPago   = 0;
            $oPC->fltPagosDespues = 0;
          } else if(($strIndice == "Amplio") && ($oCotizacion->intDeMarcaAnio < (date("Y") - 10))) {
            $oPC->intIdCotizacion = $oCotizacion->intIdCotizacion;
            $oPC->strNombre       = $strIndice;
            $oPC->fltPrecio       = 0;
            $oPC->fltPrimerPago   = 0;
            $oPC->fltPagosDespues = 0;
          } else if(($strIndice == "Limitado") && ($oCotizacion->intDeMarcaAnio < (date("Y") - 15))) {
            $oPC->intIdCotizacion = $oCotizacion->intIdCotizacion;
            $oPC->strNombre       = $strIndice;
            $oPC->fltPrecio       = 0;
            $oPC->fltPrimerPago   = 0;
            $oPC->fltPagosDespues = 0;
          } else if(($strIndice == "Basico") && ($oCotizacion->intDeMarcaAnio < (date("Y") - 20))) {
            $oPC->intIdCotizacion = $oCotizacion->intIdCotizacion;
            $oPC->strNombre       = $strIndice;
            $oPC->fltPrecio       = 0;
            $oPC->fltPrimerPago   = 0;
            $oPC->fltPagosDespues = 0;
          } else {
            $oPC->intIdCotizacion = $oCotizacion->intIdCotizacion;
            $oPC->strNombre       = $strIndice;
            $oPC->fltPrecio       = $arrRet["Importes"][5]["imp_Pq_{$strIndice}"] - 0;
            $oPC->fltPrimerPago   = $arrRet["Importes"][6]["imp_Pq_{$strIndice}"] - 0;
            $oPC->fltPagosDespues = $arrRet["Importes"][7]["imp_Pq_{$strIndice}"] - 0;
          }
          
          $oPC->GuardarObjeto();
        }
        
        if(isset($_POST["via_ajax"])) {
          echo $oCotizacion->intIdCotizacion;
        } else if(isset($_POST["via_ajax_2"])) {
          return $oCotizacion->intIdCotizacion;
        } else {
          header('Content-type: application/pdf');
          header('Content-Disposition: attachment; filename="cotizacion.pdf"');
          readfile($strGPath . '/' . $oCotizacion->strRutaArchivo);
        }
        // Mandar el correo
        global $strGCorreoRecibe;
        $oMail = new MailSystem();
        $oMail->AddAdress($strGCorreoRecibe);
        $oMail->Titulo("Cotizacion desde BECA");
        $strMensaje  = "";
        $strMensaje .= "<h1>Se ha generado una nueva cotizacion en BECA</h1>";
        $oMail->Mensaje($strMensaje);
        $oMail->Send();
        
        die;
      }
      
      $oCotizacion->GuardarObjeto();
    } else {
      // Se obtienen aqui para ver si son parte de un select
      $arrDeducibleRT = Variables::ArrayIndexSync(explode(",", $oConfiguracion->Get('deducible_rt', '0')));
      $arrDeducibleDM = Variables::ArrayIndexSync(explode(",", $oConfiguracion->Get('deducible_dm', '0')));
      $arrCoberturaRC = Variables::ArrayIndexSync(explode(",", $oConfiguracion->Get('cobertura_rc', '0')));
      $arrCoberturaGM = Variables::ArrayIndexSync(explode(",", $oConfiguracion->Get('cobertura_gm', '0')));
      
      if(Variables::GetOption('id')) {
        $oConecta = new Conecta();
        $strConsulta = "SELECT * FROM datos_cotizacion WHERE id_dato_cotizacion = " . Variables::GetOption('id');
        $oConecta->Consulta($strConsulta);
        $arrDatos = $oConecta->GetColumn();
//        prent_r($arrDatos);
        
        foreach($arrDatos as $k => $v) {
          $$k = $v;
        }
        $cp = sprintf("%05d", $cp);
        
        $strConsulta      = "SELECT id_colonia, nombre FROM cat_colonias WHERE nombre LIKE '%$cp' AND id_estado = $estado";
        $arrDatos         = Variables::GetArrayByQuery($strConsulta, "id_colonia", "nombre");
        $strSelectColonia = Variables::GetSelectByArray($arrDatos, $colonia);
        
        $strConsulta      = "SELECT A.id_municipio AS id, B.nombre FROM cat_colonias AS A JOIN cat_municipios AS B ON A.id_municipio = B.id_municipio AND A.id_estado = B.id_estado WHERE A.nombre LIKE '%$cp' AND A.id_estado = $estado AND A.id_colonia = $colonia";
        $arrDatos         = Variables::GetArrayByQuery($strConsulta, "id", "nombre");
        $strMunicipio     = Variables::GetSelectByArray($arrDatos, $colonia);
        
        $strSelectAnioMod = "<option value=''>:: SELECCIONE ::</option>" . Variables::GetSelectByTable("cat_anios_modelo", "DISTINCT(anio)", "anio"  , "$marca_anio", "", "", "WHERE id_marca = " . ($marca - 0) . " AND anio >= " . (date("Y") - 19) . " ORDER BY anio DESC");
        $strSelectTipo    = "<option value=''>:: SELECCIONE ::</option>" . Variables::GetSelectByTable("cat_modelos_sisa", "id_sisa"       , "nombre", "$sisa", "", "", "WHERE id_marca = " . ($marca - 0) . " AND anio = " . ($marca_anio - 0) . " ORDER BY nombre ASC");
        
        switch($conducto_pago) {
          case '1':
            if($forma_pago == '1') {
              $strSelectFormaPago = "<option value='1' SELECTED>CONTADO</option><option value='2'>SEMESTRAL</option>";
            } else if($forma_pago == '2') {
              $strSelectFormaPago = "<option value='1'>CONTADO</option><option value='2' SELECTED>SEMESTRAL</option>";
            } else {
              $strSelectFormaPago = "<option value='1'>CONTADO</option><option value='2'>SEMESTRAL</option>";
            }
            break;
          case '':
            $strSelectFormaPago = "";
            break;
          default:
            $strSelectFormaPago = Variables::GetSelectByTable ("cat_formas_pago", "id_forma_pago", "nombre", "$forma_pago", "", "", "WHERE mostrar = 1 ORDER BY orden ASC");
        }
        
        $strSelectNoSalvamento = "SELECTED";
      } else {
        $deducible_rt = 0;
        $deducible_dm = 0;
        $cobertura_rc = 0;
        $cobertura_gm = 0;
        
        $strSelectColonia      = "";
        $strMunicipio          = "";
        $strSelectAnioMod      = "";
        $strSelectTipo         = "";
        $strSelectFormaPago    = "";
        $strSelectNoSalvamento = "";
      }
      
      $strSelectEstado  = Variables::GetSelectByTable ("cat_estados"       , "id_estado"       , "nombre", $estado, "", "", "ORDER BY orden ASC");
      
      if(count($arrDeducibleRT) > 1) {
        $strDeducibleRT  = Variables::GetSelectByArray($arrDeducibleRT, $deducible_rt, "datos[deducible_rt]", "id='deducible_rf' required") . " %";
      } else {
        $intTmp = reset($arrDeducibleRT);
        $strDeducibleRT  = "<div>$intTmp %</div>";
        $strDeducibleRT .= "<input type='hidden' name='datos[deducible_rt]' value='$intTmp' id='deducible_rf' required />";
      }
      
      if(count($arrDeducibleDM) > 1) {
        $strDeducibleDM  = Variables::GetSelectByArray($arrDeducibleDM, $deducible_dm, "datos[deducible_dm]", "id='deducible_dm' required") . " %";
      } else {
        $intTmp = reset($arrDeducibleDM);
        $strDeducibleDM  = "<div>$intTmp %</div>";
        $strDeducibleDM .= "<input type='hidden' name='datos[deducible_dm]' value='$intTmp' id='deducible_dm' required />";
      }
      
      if(count($arrCoberturaRC) > 1) {
        $strCoberturaRC  = Variables::GetSelectByArray($arrCoberturaRC, $cobertura_rc, "datos[cobertura_rc]", "id='cobertura_rc' required");
      } else {
        $intTmp = reset($arrCoberturaRC);
        $strCoberturaRC  = "<div class='ClaseCurrency' style='text-align: left !important;'>$intTmp</div>";
        $strCoberturaRC .= "<input type='hidden' name='datos[cobertura_rc]' value='$intTmp' id='cobertura_rc' required />";
      }
      
      if(count($arrCoberturaGM) > 1) {
        $strCoberturaGM  = Variables::GetSelectByArray($arrCoberturaGM, $cobertura_gm, "datos[cobertura_gm]", "id='cobertura_gm' required");
      } else {
        $intTmp = reset($arrCoberturaGM);
        $strCoberturaGM  = "<div class='ClaseCurrency' style='text-align: left !important;'>$intTmp</div>";
        $strCoberturaGM .= "<input type='hidden' name='datos[cobertura_gm]' value='$intTmp' id='cobertura_gm' required />";
      }
      
      $intIdVendedor     = 0;
      $strBotonVendedor  = "<input type='button' value='Vendedor?' onclick='IngresarVendedor();' />";
      $strTemplateCotiza = 'cotizador_entrada.tpl.php';
      if(isset($_SESSION["extra"])) {
        if(isset($_SESSION["extra"]["id_vendedor"])) {
          $intIdVendedor = $_SESSION["extra"]["id_vendedor"];
          $oVendedor        = new Vendedor($intIdVendedor);
          $oLugarVenta      = new LugarVenta($oVendedor->intIdLugarVenta);
          $strBotonVendedor = "Vendedor: <b>{$oVendedor->strNombre}</b><br />";
          $strBotonVendedor .= "Lugar de Venta: <b>{$oLugarVenta->strNombre}</b><br />";
          $strTemplateCotiza = 'cotizador_entrada_2.tpl.php';
        }
      }
      
//      $oTmp = new CotizadorExtendido();
//      $oTmp->ObtenerCatalogoSexo();
      
      $strSelectSexo         = Variables::GetSelectByTable ("cat_sexos"         , "id_sexo"         , "nombre", "$sexo", "", "", "ORDER BY nombre ASC");
      $strSelectMarca        = Variables::GetSelectByTable ("cat_marcas"        , "id_marca"        , "nombre", "$marca", "", "", "ORDER BY nombre ASC");
      $strSelectPaquetes     = Variables::GetSelectByTable ("cat_paquetes"      , "id_paquete"      , "nombre", "$paquete", "", "", "WHERE mostrar = 1 ORDER BY nombre ASC");
      
//      $strSelectFormaPago    = Variables::GetSelectByTable ("cat_formas_pago"   , "id_forma_pago"   , "nombre", "$forma_pago", "", "", "WHERE mostrar = 1 ORDER BY nombre ASC");
      $strSelectConductoPago = Variables::GetSelectByTable ("cat_conductos_pago", "id_conducto_pago", "nombre", "$conducto_pago", "", "", "WHERE mostrar = 1 ORDER BY nombre ASC");
//      $strSelectCobertura = Variables::GetSelectByTable ("cat_coberturas_paquete", "id_cobertura", "nombre", "", "", "", "ORDER BY nombre ASC");
      
      $strSelectEstadoCivil  = Variables::GetSelectByTable ("cat_estado_civil"  , "id_edo_civil"    , "nombre", "", "", "", "");
      $strSelectTipoPersona  = Variables::GetSelectByTable ("cat_tipos_persona" , "id_tipo_persona" , "nombre", "", "", "", "");
      $strSelectTipoDomi     = Variables::GetSelectByTable ("cat_tipos_dir"     , "id_tipo_dir"     , "nombre", "", "", "", "");
      $strSelectTipoTel      = Variables::GetSelectByTable ("cat_tipos_telefono", "id_tipo_telefono", "nombre", "", "", "", "");
      
//      $strJSMarcaAnio = Variables::GetJSArrayByTable("cat_modelos", "id_marca,id_modelo,id_marca,id_modelo", "nombre", "arrModelos");
      eval('$strPagina = "' . $oTemplate->Get ($strTemplateCotiza) . '";');
    }
    
    return $strPagina;
  }
  
  static function ObtenerDescripcionHTML($strNombre, $arrPrecios, $arrInfoExtra) {
    prent_r($arrPrecios);
  }
}

class FiltroCotizaciones extends Filtro {
  function FiltroCotizaciones() {
    $arrProceso['fecha_creacion'  ] = "Fecha de Cotizacion"  ;
    $arrProceso['apaterno'        ] = "Apellido Paterno"     ;
    $arrProceso['amaterno'        ] = "Apellido Materno"     ;
    $arrProceso['nombre'          ] = "Nombre"               ;
    $arrProceso['telefono'        ] = "Telefono"             ;
    $arrProceso['de_fec_nac'      ] = "Fecha de Nacimiento"  ;
    $arrProceso['de_sexo'         ] = "Sexo"                 ;
    $arrProceso['de_email'        ] = "Email"                ;
    $arrProceso['de_cp'           ] = "Codigo Postal"        ;
    $arrProceso['de_estado'       ] = "Estado"               ;
    $arrProceso['de_colonia'      ] = "Colonia"              ;
    $arrProceso['de_marca'        ] = "Marca"                ;
    $arrProceso['de_marca_anio'   ] = "Anio Marca"           ;
    $arrProceso['de_sisa'         ] = "Codigo SISA"          ;
    $arrProceso['de_deducible_rt' ] = "Deducible RT"         ;
    $arrProceso['de_deducible_dm' ] = "Deducible DM"         ;
    $arrProceso['de_cobertura_rc' ] = "Cobertura RC"         ;
    $arrProceso['de_cobertura_gm' ] = "Cobertura GM"         ;
    $arrProceso['de_paquete'      ] = "Paquete"              ;
    $arrProceso['de_forma_pago'   ] = "Forma de pago"        ;
    $arrProceso['de_conducto_pago'] = "Conducto de Pago"     ;
    
    $arrProceso['resultado_ws'    ] = "Resultado Web Service";
    $arrProceso['id_log'          ] = "Log de Cotizacion"    ;
    $arrProceso['ruta_archivo'    ] = "Ruta Archivo"         ;
    
    $arrReferencias = array();
    $arrReferencias["de_sexo"         ]["tabla"]["nombre"] = "cat_sexos"         ;
    $arrReferencias["de_sexo"         ]["tabla"]["indice"] = "id_sexo"           ;
    $arrReferencias["de_sexo"         ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_estado"       ]["tabla"]["nombre"] = "cat_estados"       ;
    $arrReferencias["de_estado"       ]["tabla"]["indice"] = "id_estado"         ;
    $arrReferencias["de_estado"       ]["tabla"]["desc"  ] = "nombre"            ;
    $arrReferencias["de_estado"       ]["tabla"]["orden" ] = "nombre"            ;
    
    $arrReferencias["de_marca"        ]["tabla"]["nombre"] = "cat_marcas"        ;
    $arrReferencias["de_marca"        ]["tabla"]["indice"] = "id_marca"          ;
    $arrReferencias["de_marca"        ]["tabla"]["desc"  ] = "nombre"            ;
    $arrReferencias["de_marca"        ]["tabla"]["orden" ] = "nombre"            ;
    /*
    $arrReferencias["de_marca_anio"   ]["tabla"]["nombre"] = "cat_anios_modelo"  ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["indice"] = "DISTINCT(anio)"    ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["desc"  ] = "anio"              ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["orden" ] = "anio"              ;
    */
    $arrReferencias["de_paquete"      ]["tabla"]["nombre"] = "cat_paquetes"      ;
    $arrReferencias["de_paquete"      ]["tabla"]["indice"] = "id_paquete"        ;
    $arrReferencias["de_paquete"      ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_forma_pago"   ]["tabla"]["nombre"] = "cat_formas_pago"   ;
    $arrReferencias["de_forma_pago"   ]["tabla"]["indice"] = "id_forma_pago"     ;
    $arrReferencias["de_forma_pago"   ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_conducto_pago"]["tabla"]["nombre"] = "cat_conductos_pago";
    $arrReferencias["de_conducto_pago"]["tabla"]["indice"] = "id_conducto_pago"  ;
    $arrReferencias["de_conducto_pago"]["tabla"]["desc"  ] = "nombre"            ;
    
    parent::CrearFiltro("cotizaciones", "id_cotizacion", $arrProceso, "Busqueda", "", "id_cotizacion ASC", "Cotizaciones", $arrReferencias);
  }
}

class ABC_Cotizaciones extends ABC_Base {
  function ABC_Cotizaciones() {
    $strClaseBase     = "Cotizaciones"      ;
    $strClaseFiltro   = "FiltroCotizaciones";
    $strCampoMostrar  = ""                  ;
    $strOpcionListado = "abc_cotizaciones"  ;
    $strOpcionGuardar = "abc_cotizaciones"  ;
    $strClaseCarga    = ""                  ;

    $arrNombresColumnas = array();
    $arrNombresColumnas['fecha_creacion'  ] = "Fecha de Cotizacion"  ;
    $arrNombresColumnas['nombre'          ] = "Nombre"               ;
    $arrNombresColumnas['telefono'        ] = "Telefono"             ;
    $arrNombresColumnas['de_fec_nac'      ] = "Fecha de Nacimiento"  ;
    $arrNombresColumnas['de_sexo'         ] = "Sexo"                 ;
    $arrNombresColumnas['de_email'        ] = "Email"                ;
    $arrNombresColumnas['de_cp'           ] = "Codigo Postal"        ;
    $arrNombresColumnas['de_estado'       ] = "Estado"               ;
    $arrNombresColumnas['de_colonia'      ] = "Colonia"              ;
    $arrNombresColumnas['de_marca'        ] = "Marca"                ;
    $arrNombresColumnas['de_marca_anio'   ] = "Anio Marca"           ;
    $arrNombresColumnas['de_sisa'         ] = "Codigo SISA"          ;
    $arrNombresColumnas['de_deducible_rt' ] = "Deducible RT"         ;
    $arrNombresColumnas['de_deducible_dm' ] = "Deducible DM"         ;
    $arrNombresColumnas['de_cobertura_rc' ] = "Cobertura RC"         ;
    $arrNombresColumnas['de_cobertura_gm' ] = "Cobertura GM"         ;
    $arrNombresColumnas['de_paquete'      ] = "Paquete"              ;
    $arrNombresColumnas['de_forma_pago'   ] = "Forma de pago"        ;
    $arrNombresColumnas['de_conducto_pago'] = "Conducto de Pago"     ;
    
    $arrNombresColumnas['resultado_ws'    ] = "Resultado Web Service";
    $arrNombresColumnas['id_log'          ] = "Log de Cotizacion"    ;
    $arrNombresColumnas['ruta_archivo'    ] = "Ruta Archivo"         ;
    
    $arrReferencias = array();
    $arrReferencias["de_sexo"         ]["tabla"]["nombre"] = "cat_sexos"         ;
    $arrReferencias["de_sexo"         ]["tabla"]["indice"] = "id_sexo"           ;
    $arrReferencias["de_sexo"         ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_estado"       ]["tabla"]["nombre"] = "cat_estados"       ;
    $arrReferencias["de_estado"       ]["tabla"]["indice"] = "id_estado"         ;
    $arrReferencias["de_estado"       ]["tabla"]["desc"  ] = "nombre"            ;
    $arrReferencias["de_estado"       ]["tabla"]["orden" ] = "nombre"            ;
    
    $arrReferencias["de_marca"        ]["tabla"]["nombre"] = "cat_marcas"        ;
    $arrReferencias["de_marca"        ]["tabla"]["indice"] = "id_marca"          ;
    $arrReferencias["de_marca"        ]["tabla"]["desc"  ] = "nombre"            ;
    $arrReferencias["de_marca"        ]["tabla"]["orden" ] = "nombre"            ;
    /*
    $arrReferencias["de_marca_anio"   ]["tabla"]["nombre"] = "cat_anios_modelo"  ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["indice"] = "DISTINCT(anio)"    ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["desc"  ] = "anio"              ;
    $arrReferencias["de_marca_anio"   ]["tabla"]["orden" ] = "anio"              ;
    */
    $arrReferencias["de_paquete"      ]["tabla"]["nombre"] = "cat_paquetes"      ;
    $arrReferencias["de_paquete"      ]["tabla"]["indice"] = "id_paquete"        ;
    $arrReferencias["de_paquete"      ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_forma_pago"   ]["tabla"]["nombre"] = "cat_formas_pago"   ;
    $arrReferencias["de_forma_pago"   ]["tabla"]["indice"] = "id_forma_pago"     ;
    $arrReferencias["de_forma_pago"   ]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["de_conducto_pago"]["tabla"]["nombre"] = "cat_conductos_pago";
    $arrReferencias["de_conducto_pago"]["tabla"]["indice"] = "id_conducto_pago"  ;
    $arrReferencias["de_conducto_pago"]["tabla"]["desc"  ] = "nombre"            ;
    
    $arrReferencias["ruta_archivo"]["tipos"] = "U";
    
    $arrPlugIns               = array();
    
    $this->Inicializar($strClaseBase, $arrNombresColumnas, $strOpcionListado, $strOpcionGuardar, $strCampoMostrar, $strClaseFiltro, $arrReferencias, "", $strClaseCarga);
    $this->arrPlugIns = $arrPlugIns;
    
    $this->bolABCLista             = true ;
    $this->bolABCListaOcultarTD    = true ;
    $this->bolPosibleNuevoElemento = false;
    $this->intTipoGuardado         = 1    ;
    $this->intNumeroRes            = 20   ;
    $this->bolSoloLectura          = true ;
    $this->bolOcultarTituloEnLista = true ;
    $this->bolABCListaMostrarInfo  = true ;
  }
}

class Referencia {
  var $strSerieRecibo ;
  var $strCodigoMoneda;
  var $strNumeroRecibo;
  var $strFechaVenc   ;
  var $strPrimaTotal  ;
  
  function Referencia() {
    $this->strSerieRecibo  = "A01";
    $this->strCodigoMoneda = "0";
  }
  
  /**
   * Tipos posibles:
   *   HSBC
   *   BANAMEX
   *   BANORTE
   *   BANCOMER
   *   SANTANDER
   */
  function ConvertirLetra($strLetra, $strTipo = "HSBC") {
    $arrIndice[1]["A"] =  1;    $arrIndice[1]["B"] =  2;    $arrIndice[1]["C"] =  3;    $arrIndice[1]["D"] =  4;
    $arrIndice[1]["E"] =  5;    $arrIndice[1]["F"] =  6;    $arrIndice[1]["G"] =  7;    $arrIndice[1]["H"] =  8;
    $arrIndice[1]["I"] =  9;
    $arrIndice[1]["J"] =  1;    $arrIndice[1]["K"] =  2;    $arrIndice[1]["L"] =  3;    $arrIndice[1]["M"] =  4;
    $arrIndice[1]["N"] =  5;    $arrIndice[1]["O"] =  6;    $arrIndice[1]["P"] =  7;    $arrIndice[1]["Q"] =  8;
    $arrIndice[1]["R"] =  9;
    $arrIndice[1]["S"] =  2;    $arrIndice[1]["T"] =  3;    $arrIndice[1]["U"] =  4;    $arrIndice[1]["V"] =  5;
    $arrIndice[1]["W"] =  6;    $arrIndice[1]["X"] =  7;    $arrIndice[1]["Y"] =  8;    $arrIndice[1]["Z"] =  9;
    
    $arrIndice[2]["A"] =  1;    $arrIndice[2]["B"] =  2;    $arrIndice[2]["C"] =  3;    $arrIndice[2]["D"] =  4;
    $arrIndice[2]["E"] =  5;    $arrIndice[2]["F"] =  6;    $arrIndice[2]["G"] =  7;    $arrIndice[2]["H"] =  8;
    $arrIndice[2]["I"] =  9;
    $arrIndice[2]["J"] =  1;    $arrIndice[2]["K"] =  2;    $arrIndice[2]["L"] =  3;    $arrIndice[2]["M"] =  4;
    $arrIndice[2]["N"] =  5;    $arrIndice[2]["O"] =  6;    $arrIndice[2]["P"] =  7;    $arrIndice[2]["Q"] =  8;
    $arrIndice[2]["R"] =  9;
    $arrIndice[2]["S"] =  1;    $arrIndice[2]["T"] =  2;    $arrIndice[2]["U"] =  3;    $arrIndice[2]["V"] =  4;
    $arrIndice[2]["W"] =  5;    $arrIndice[2]["X"] =  6;    $arrIndice[2]["Y"] =  7;    $arrIndice[2]["Z"] =  8;
    
    $arrIndice[3]["A"] = 10;    $arrIndice[3]["B"] = 11;    $arrIndice[3]["C"] = 12;    $arrIndice[3]["D"] = 13;
    $arrIndice[3]["E"] = 14;    $arrIndice[3]["F"] = 15;    $arrIndice[3]["G"] = 16;    $arrIndice[3]["H"] = 17;
    $arrIndice[3]["I"] = 18;
    $arrIndice[3]["J"] = 19;    $arrIndice[3]["K"] = 20;    $arrIndice[3]["L"] = 21;    $arrIndice[3]["M"] = 22;
    $arrIndice[3]["N"] = 23;    $arrIndice[3]["O"] = 24;    $arrIndice[3]["P"] = 25;    $arrIndice[3]["Q"] = 26;
    $arrIndice[3]["R"] = 27;
    $arrIndice[3]["S"] = 28;    $arrIndice[3]["T"] = 29;    $arrIndice[3]["U"] = 30;    $arrIndice[3]["V"] = 31;
    $arrIndice[3]["W"] = 32;    $arrIndice[3]["X"] = 33;    $arrIndice[3]["Y"] = 34;    $arrIndice[3]["Z"] = 35;
    
    $arrTabla["HSBC"     ] = 1;
    $arrTabla["BANAMEX"  ] = 1;
    $arrTabla["BANORTE"  ] = 1;
    $arrTabla["BANCOMER" ] = 2;
    $arrTabla["SANTANDER"] = 3;
    
    if((($strLetra - 0) == 0) && ($strLetra != 0)) {
      return $arrIndice[$arrTabla[$strTipo]][$strLetra];
    } else {
      return $strLetra - 0;
    }
  }
  
  function CalculoFechaCondensada($strFecha) {
    $intAnio = date("Y", strtotime($strFecha)) - 0;
    $intMes  = date("m", strtotime($strFecha)) - 0;
    $intDia  = date("d", strtotime($strFecha)) - 0;
    
    $intCAnio1 = 1988;
    $intCAnio2 =  372;
    $intCMes1  =    1;
    $intCMes2  =   31;
    $intCDia1  =    1;
    
    $strRes = 
      (($intAnio - $intCAnio1) * $intCAnio2) +
      (($intMes  - $intCMes1 ) * $intCMes2 ) +
       ($intDia  - $intCDia1 );
//    die("(($intAnio - $intCAnio1) * $intCAnio2) + (($intMes  - $intCMes1 ) * $intCMes2 ) + ($intDia  - $intCDia1 )");
//    die($strRes . "*");
    return $strRes;
  }
  
  function CalculoMontoCondensado($fltMonto) {
    $arrInd[0] = 3;
    $arrInd[1] = 7;
    $arrInd[2] = 1;
    
    $bolProcesando = true;
    $fltMonto .= "";
    
    $intIndAct = 0;
    $intResp = 0;
    while($bolProcesando) {
      $intNum   = substr($fltMonto, 0, 1);
      $fltMonto = substr($fltMonto, 1);
      
      if($intNum == ".") continue;
      
      $intResp += $intNum * $arrInd[$intIndAct % 3];
      
      if($fltMonto == "") break;
      $intIndAct++;
    }
    
    return $intResp % 10;
  }
  
  function CalculoNumerico($strRef) {
    
  }
  
  function CalcularReferencia($strTipo = "HSBC") {
    $strRes = "";
    if($strTipo == "BANAMEX") {
      $strRes .= "141101";
    }
    $strRes.= $this->strSerieRecibo;
    $strRes.= $this->strCodigoMoneda;
    $strRes.= sprintf("%08d", $this->strNumeroRecibo);
    $strRes.= $this->CalculoFechaCondensada($this->strFechaVenc);
    $strRes.= $this->CalculoMontoCondensado($this->strPrimaTotal);
    
    $strRes .= "2";
    
    return $strRes;
  }
}

?>